﻿using System;

namespace Rail.Commons
{
    internal interface ILogger
    {
        /// <summary>
        /// Log a trace message
        /// </summary>
        /// <param name="message">The message to log</param>
        void Trace(string message);

        /// <summary>
        /// Log a debug message
        /// </summary>
        /// <param name="message">The message to log</param>
        void Debug(string message);

        /// <summary>
        /// Log a fatal message
        /// </summary>
        /// <param name="message">The message to log</param>
        void Fatal(string message);

        /// <summary>
        /// Log a fatal message including an exception
        /// </summary>
        /// <param name="ex">The exception to log</param>
        void Fatal(Exception ex);

        /// <summary>
        /// Log a info message
        /// </summary>
        /// <param name="message">The message to log</param>
        void Info(string message);

        /// <summary>
        /// Log a warn message
        /// </summary>
        /// <param name="message">The message to log</param>
        void Warn(string message);

        /// <summary>
        /// Log a error message
        /// </summary>
        /// <param name="message">The message to log</param>
        void Error(string message);

        /// <summary>
        /// Log a error message
        /// </summary>
        /// <param name="ex">The exception to log</param>
        void Error(Exception ex);

        /// <summary>
        /// Shutdown the logger and release all resources.
        /// </summary>
        void Shutdown();
    }
}